package com.yidu.DatelessManagement.service;

import com.yidu.BusinessParament.entity.Cash;
import com.yidu.DatelessManagement.entity.NetWorth;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * 净值统计的业务层
 * 净值统计service类
 * @author 任俊杰
 * @version 1.0
 * @date 2023/1/5
 */
@Service
public interface NetWorthService {

    /**
     * 查询净值统计表所有信息
     * @param netWorth 净值统计对象
     * @return list集合
     */
    List<NetWorth> selectAllNetWorthNoLimit(NetWorth netWorth);


    /**
     * 获取总行数
     * @param fundId 基金id
     * @param createTime 创建时间
     * @return 返回一个int类型的参数
     */
    int getSumRow(String fundId, String createTime);


    /**
     * 清空当日的统计数据
     * @param fundId 基金id
     * @param createTime 创建时间
     * @return 返回一个int类型的参数
     */
    int deleteSameDayStatisticalData(String fundId, String createTime);


    /**
     * 获取证券信息（已封装为净值统计对象）
     * @param securityType 证券类型 1：股票  2：债券
     * @param fundId 基金id
     * @param date 需要统计的时间
     * @return list集合
     */
    List<NetWorth> getSecuritiesMsg(int securityType, String fundId, String date);


    /**
     * 新增父模块数据
     * @param netWorth 净值统计对象
     * @return int 执行成功的行数
     */
    int insertParentModule(NetWorth netWorth);


    /**
     * 新增子模块数据
     * @param netWorth 净值统计对象
     * @return int 执行成功的行数
     */
    int insertSubmodule(NetWorth netWorth);


    /**
     * 获取现金对象集合
     * @param fundId    基金id
     * @param date 创建时间 取现金库存的时间
     * @return List<Cash> 现金对象集合
     */
    List<Cash> getCash(String fundId, String date);


    /**
     * 获取现金子模块（账户）下的存款利息
     * @param businessType 业务类型 1为管理费 2为托管费 3为存款利息 4为申购赎回费
     * @param fundId 基金id
     * @param date 现金库存的时间
     * @return list<Cash>现金集合对象
     */
    List<Cash> getCashInterestOnDeposit(int businessType, String fundId, String date);


    /**
     * 获取证券清算款
     * @param fundId 基金id
     * @param date 证券应收应付库存的时间
     * @return int 返回一个int类型的参数
     */
    int getSecuritiesLiquidationMoney(String fundId, String date);


    /**
     * 获取股票 单位净值 的集合(证券库存表)
     * @param fundId 基金id
     * @param date 证券库存的时间
     * @return list<Double>股票单位净值集合
     */
    List<Double> getUnitNetWorth(String fundId, String date);


}
